package com.hn.project.rqinspect.service;

import com.hn.framework.web.domain.AjaxResult;
import com.hn.project.rqinspect.domain.database.Task;
import com.hn.project.rqinspect.domain.database.TaskPushRecord;
import com.hn.project.rqinspect.domain.database.TaskRecord;
import com.hn.project.rqinspect.domain.dto.*;
import com.hn.project.rqinspect.domain.vo.GenTaskVo;
import com.hn.project.rqinspect.domain.vo.TaskRecordVo;
import com.hn.project.rqinspect.domain.vo.TaskVo;
import io.swagger.models.auth.In;

import java.util.List;

public interface TaskService {

    /**
     *  任务详情
     */
    Task get(Integer taskId);

    /**
     *  任务记录列表
     *  - 代办任务
     */
    List<TaskRecordDto> listTodoTask(TaskRecordVo taskRecordVo);

    /**
     *  任务记录详情
     */
    TaskRecordDto getTaskRecord(Integer pushRecordId);

    /**
     *  更新任务记录
     */
    int updateTaskRecord(TaskRecord taskRecord);

    /**
     *  提交巡检
     */
    int submit(Integer taskRecordId);

    /**
     *  巡检日记记录
     */
    List<TaskRecordHistoryDto> listHistoryTaskRecord(TaskRecordVo taskRecordVo);

    /**
     *  巡检日记记录详情
     */
    TaskRecordHistoryDto getHistoryTaskRecord(Integer taskRecordId);

    /**
     *  根据用户分组 和 网点查询干部巡检任务
     * @param groupIds
     * @param branchIds
     * @return
     */
    List<Integer> listGenTask(List<Integer> groupIds, List<Integer> branchIds);

    /**
     * 生成任务推送记录
     */
    int genTaskPushRecord(List<TaskPushRecord> taskPushRecords);

    int saveTaskRecord(TaskRecord taskRecord);

    /**
     * 查询当前任务下的其他巡检人员
     */
    List<CheckUserDto> listCheckUsers(Integer taskId,Integer userId);

    /**
     * 查询网点的历史巡检记录统计信息
     */
    TaskCheckCountDto countTaskCheckRecord(Integer branchId);

    /**
     *  统计代办任务
     */
    CountTodoTaskDto countTodoTask(List<Integer> groupIds);

    List<Integer> listTaskIdsByGroupIds(List<Integer> groupIds);

    List<Integer> listTaskIdsByBranchIds(List<Integer> groupIds);

    CountTaskNumDto countTask(Integer userId);

    CountTaskDto countTaskRecord(Integer userId, Integer taskType);

    /* 任务统计开始 */

    CountTaskNumDto countFinishTask(Integer userId,Integer roleType);

    /**
     *  查询巡检干部查询的问题
     * @param userId
     * @return
     */
    CountTaskNumDto countQuesTask(Integer userId);

    /**
     *  查询网点的问题
     * @param userId
     * @return
     */
    CountTaskNumDto countBranchQuesTask(Integer userId);

    CountTaskNumDto countDraftTask(Integer userId);

    CountTaskNumDto countAuditSuccessTask(Integer userId);

    CountTaskNumDto countAuditTodoTask(Integer userId);

    /* 任务统计结束 */

    /**
     * 我的草稿列表
     */
    List<DraftTaskDto> listDraftTask(Integer userId,Integer taskType);

    /**
     * 提交巡检前 统计未检查部位个数
     */
    CountSubmitBeforeDto countSubmitBefore(Integer taskRecordId);

    /**
     * 获取总任务列表
     * @param taskVo
     * @return
     */
    List<TaskDto> listTask(TaskVo taskVo);

    List<TaskRecordDto> listTaskRecord(TaskRecordVo taskRecordVo);

    /**
     * 领取任务
     * @param pushRecordId
     * @return
     */
    int receiveTaskRecord(Integer pushRecordId);

    List<TaskRecord> listGenTaskRecord(List<Integer> taskIds, Integer userId);

    AjaxResult genTask(String lng, String lat,Integer userId);
}
